# mise à zéro de certains marqueurs jugés trop différents au niveau des fréquences alléliques
obligatory_missing_snp <- function(inbfile=NULL,pvalFile=NULL,th=NULL,status=NULL,method=NULL,platefile=NULL,outputfile="oblig_missing"){
	if(!is.null(inbfile) & !is.null(pvalFile) & !is.null(th) & !is.null(status) & !is.null(method)){
		#chargement des donnees
		pval <- read.table(file=pvalFile,h=T)

		zerofile <- NULL
		clusterfile <- NULL

		replaceNA <- apply(X=pval,MARGIN=1,function(data) ifelse(is.na(data),2,data))
		pval2 <- as.data.frame(t(replaceNA))

		# creation d'une matrice dont tous les marqueurs superieurs au seuil sont mis comme "NA"
		data <-  apply(pval2[4:(dim(pval)[2]-2)],2,function(data) ifelse(as.numeric(data) < th,data,2))
		#data <-  apply(pval[-c(1,2,3)],2,function(data) ifelse(as.numeric(data) < th,data,"NA"))
		# ajout des "rsID" et creation d'un objet de type "data frame"
		data2 <- as.data.frame(cbind(as.character(pval$SNP),data))
		col_names <- colnames(data2)

		if(method == 1){

			# prepartation des fichiers cluster ".clst" (format plink)
			if(status == 1){			
				header <- read.table(file="header-pheno-file2.txt",h=T)
				cluster <- read.table(file="cluster-ctrls.dat",h=T)
			}
			if(status == 2){
				header <- read.table(file="header-pheno-file1.txt",h=T)
				cluster <- read.table(file="cluster-cases.dat",h=T)
			}
			corresp <- cbind(col_names[2:length(col_names)],header) # correspondance nom plaque / numero plaque
		}else if(method == 2 & !is.null(platefile)){
			cluster <- read.table(file=platefile)
			platenames <- read.table(file="plates-names.txt")
		}

		for( i in 2:dim(data2)[2]){ # pour chaque plaque

			# creation des fichiers ".zero" (format plink) : liste de marqueurs à mettre a zero pour chaque plaque + phenotype(plaque1...)
			tmpdata2 <- data2[c(1,i)] # rsID plaque
			list_to_del <- tmpdata2[tmpdata2[c(2)] != 2,"V1"]# liste des SNPs dont la p-valeur <seuil 
#			col_names <- colnames(data2)
			if(length(list_to_del) !=0){ # il y a des SNPs en dessous du seuil

				phenotype <- rep(as.character(platenames[i-1,1]),length(list_to_del))# creation de la colonne phenotype du fichier ".zero"
				tmpzerofile <- as.data.frame(cbind(as.character(list_to_del),phenotype)) # fichier ".zero"

				# creation des fichiers cluster ".clst" (format plink)
				if(method==1){
					tmpclusterfile1 <- cluster[cluster[c(3)] == corresp[i-1,2] , c("FID","IID")] # recuperation des individus correspondant a la plaque
				} else if(method==2){
					phenotype_substr <- substr(phenotype[1],2,nchar(phenotype[1])) # on enlève le premier caractère
					tmpclusterfile1 <- cluster[cluster[c(3)] == phenotype[1] | cluster[c(3)] == phenotype_substr, c("V1","V2")] 
				}
				phenotype <- rep(platenames[i-1,1],dim(tmpclusterfile1)[1])# creation de la colonne phenotype du fichier ".clst"
				tmpclusterfile2 <- as.data.frame(cbind(tmpclusterfile1,phenotype)) # fichier ".clst"				

				# concatenation des donnees 
				zerofile <- rbind(zerofile,tmpzerofile)
				clusterfile <- rbind(clusterfile,tmpclusterfile2)
 				
			}
		}
					# enregistrement des donnees
			write.table(zerofile,file=paste("snps_under_",th,"_",outputfile,".zero",sep=""),quote=F,row.names=F,col.names=F)
			write.table(clusterfile,file=paste("snps_under_",th,"_",outputfile,".clst",sep=""),quote=F,row.names=F,col.names=F)

			#  mise a zero des SNPs dont la p-valeur < seuil
			system(paste("plink --noweb --bfile ",inbfile," --oblig-missing snps_under_",th,"_",outputfile,".zero --oblig-clusters snps_under_",th,"_",outputfile,".clst --make-bed --out ",outputfile,sep=""))
	}
}

